【コマンドライン】権限・パーミンション
OSには権限(パーミッション)の概念が存在します。
権限はセキュリティ向上や誤操作対策など様々な場面で活躍します。
GUI・CUIに限らずOS自体に関わりのある事ですが、ここではコマンドラインを使って権限について解説します。
なお、このドキュメントはCentOSで解説します。
ご利用環境によって異なる場合がございますのでご注意ください。
検証環境
権限(パーミッション)
権限はパーミッションとも呼ばれ、“ユーザーの操作権限”を指します。
権限はセキュリティやシステムの中枢に直接関わる部分です。
適切に管理することで、不正アクセスの阻止や誤操作の対策などの様々場面で活躍します。
ユーザー分類
データに対する権限ではユーザーは『所有者』・『グループ』・『その他』のいずれかに分類されます。
以降、この分類を便宜上『ユーザー分類』と呼びます。
権限はユーザー分類単位で設定され、ユーザーは分類に応じた権限が適用されます。
所有者
対象データの所有者(ユーザー)が分類されます。
一般的に最も権限レベルを高く設定する分類です。
グループ
対象データのグループに所属するユーザーが分類されます。
一般的に所有者の次に権限を持つように設定する分類です。
その他
所有者・グループのいずれにも該当しないユーザーが分類されます。
一般的に不特定多数のユーザーが分類される可能性があり、最も権限がないように設定する分類です。
操作権限
操作権限には『読み込み』・『書き込み』・『実行』の3種類があります。
この3つの権限を各ユーザー分類に設定し、ユーザーの操作を制御します。
読み込み
データを読み込む権限です。
内容の変更を伴わない表示などの操作が該当します。
書き込み
データを書き込む権限です。
内容を変更する編集などが該当します。
実行
プログラムなどを実行する権限です。
シェルスクリプトなどの実行が該当します。
※ シェルスクリプトはコマンドラインのコマンド入力等の一連流れをファイルにしたモノです。
権限の確認方法
権限はls
コマンドと-l
オプションで確認できます。
$ ls -l
___ih_hl_start
-rwxrw-r-- 1 hacker guest 35 12月 16 14:40 sample
___ih_hl_end
この例にはsample
ファイルがあります。
その権限は主に次の部分です。
-rwxrw-r-- 1 hacker guest
この部分は次のように先頭から区切って、6つの意味で構成されます。
(1) -
(2) rwx
(3) rw-
(4) r–
(5) hacker
(6) guest
※ 中央の『1』は読み飛ばして問題ありません。
各項目の意味は以下通りです。
(1) データの種類
データの種類です。
ファイルは-
(ハイフン)、ディレクトリはd
、シンボリックリンクはl
など、ファイルの種類に応じた文字の部分になります。
(2) 所有者の権限
所有者が持つ権限です。
『読み取り(r
)』・『書き込み(w
)』・『実行(x
)』の権限が1文字ずつ並んで表示されます。
権限を持つ場合は該当の権限を表す文字が表示されますが、持たない場合は-
(ハイフン)で表示されます。
この例ではrwx
なので、所有者は全ての権限を持っています。
(3) グループの権限
グループの権限です。
この例ではrw-
なので、グループは『読み取り』と『書き込み』の権限のみ持ちます。
(4) その他の権限
所有者にもグループにも分類されないその他ユーザーの権限です。
この例ではr--
なので、その他ユーザーは『読み取り』の権限のみを持ちます。
(5) 所有者
所有者名(ユーザー)です。
所有者に分類されるユーザーは(2)の権限が付与されます。
(6) グループ
グループ名です。
グループに所属するユーザーは(3)の権限が付与されます。
権限の動作確認(サンプル)
次のtest.sh
ファイルを使った権限の動作確認のサンプルを示します。
$ cat test
#!/usr/bin/bash
echo "Hello World"
$ ls -l
-rwxrw-r-- 1 root hacker 35 12月 16 14:41 test
test.sh
はシェルスクリプトで、実行するとHello World
を出力します。
実際に権限が適用されているかは、次の操作(コマンド)で確認します。
権限 | 操作(コマンド) |
---|---|
読み込み | cat test |
書き込み | echo "#MEMO" >> test ※1 |
実行 | ./test ※2 |
※1 echoコマンドは引数で与えた文字を出力します。
※2 シェルスクリプトは./ファイル名
の形式で実行できます。
所有者
所有者のrootユーザーで各操作を行ないます。
権限はrwx
となっており、全ての操作が可能です。
読み込み
___ih_hl_start
[root]# cat test
___ih_hl_end
#!/usr/bin/bash
echo "Hello World"
読み込みに成功しました。
書き込み
___ih_hl_start
[root]# echo "#MEMO" >> test
___ih_hl_end
[root]# cat test
#!/usr/bin/bash
echo "Hello World"
#MEMO
書き込みに成功しました。
実行
___ih_hl_start
[root]# ./test
___ih_hl_end
Hello World
実行に成功しました。
グループ
グループのhackerユーザーで各操作を行ないます。
権限はrw-
となっており、読み込みと書き込みの操作が可能です。
読み込み
___ih_hl_start
[hacker]$ cat test
___ih_hl_end
#!/usr/bin/bash
echo "Hello World"
読み込みに成功しました。
書き込み
___ih_hl_start
[hacker]$ echo "#MEMO" >> test
___ih_hl_end
[hacker]$ cat test
#!/usr/bin/bash
echo "Hello World"
#MEMO
書き込みに成功しました。
実行
___ih_hl_start
[hacker]$ ./test
___ih_hl_end
-bash: ./test: 許可がありません
権限がないため、実行に失敗しました。
その他
所有者・グループに該当しないその他のguestユーザーで各操作を行ないます。
権限はr--
となっており、読み込みのみ操作が可能です。
読み込み
___ih_hl_start
[guest]$ cat test
___ih_hl_end
#!/usr/bin/bash
echo "Hello World"
読み込みに成功しました。
書き込み
___ih_hl_start
[guest]$echo "#MEMO" >> test
___ih_hl_end
-bash: test: 許可がありません
権限がないため、書き込みに失敗しました。
実行
___ih_hl_start
[guest]$ ./test
___ih_hl_end
bash: ./test: 許可がありません
権限がないため、実行に失敗しました。